iziBasic et l'afffichage en 320 * 480
Thursday 01 January 1970 - 01:00:01
Dans cet article nous allons gérer completement le mode 320*480 en gerant la fermeture ou l'ouverture de la zone de saisie virtuelle, ainsi que le redimmensionnement du formulaire commun de iziBasic afin de pouvoir dessiner dans la zone graffiti virtuelle lorsque celle ci est masquée.

Requis

  • PPShell
  • pp.exe pour ARM
  • PalmAPI.pas (disponible avec les exemples PP)
  • iziBasic
  • Savoir compilé avec PP
  • Savoir compilé avec iziBasic


L'applet PP (Pascal)

Voici le code source de l'applet pp, commentée.


//L'applet prends en parametre une string '1' ou '0'
//Avec '1' -> L'Applet fonctionne en mode Set c'est a dire qu'elle cache la zone virtuelle et redimensionne la fenetre et le formulaire courant.
//Avec '0' -> L'Applet fonctionne en mode Get c'est a dire recupere l'etat actuel de la zone de saisie virtuelle.


type RectangleTypePtr=^RectangleType;
//On defini nos fonction en fonction de l'API Palm
function FrmSetDIAPolicyAttr(form:formPtr;pol:UInt16):Err;inline($740E,SYSTRAP,$A470);
function SetDIAState(pol:UInt16):UInt16;inline($7400,SYSTRAP,$A470);
function WinSetConstraintsSize(winH:WinHandle;minH:UInt16;prefH:UInt16;maxH:UInt16;
minW:UInt16;prefW:UInt16;maxW:UInt16):Err;inline($740D,SYSTRAP,$A470);
function FrmGetWindowHandle(form:formPtr):WinHandle;inline(SYSTRAP,$A17C);
function PINSetInputTriggerState(state:UInt16):Err;inline($7402,SYSTRAP,$A470);
Procedure WinSetBounds(winH:WinHandle;r:RectangleTypePtr);inline(SYSTRAP,$A300);
function GetDIAState:UInt16;inline($7401,SYSTRAP,$A470);

//Def necessaire a iziBasic
type iBasFunType=function(S:string):string;
var iBasCallPP:iBasFunType;


function CallPP(S:string):string;

var
//variable permettant de stocker le formulaire courant
f:FormPtr;
//variable permettant de stocker l erreur
error:Err;
//variable permettant de stocker la version de l'api PIN (API de saisie virtuelle entre autre)
version:UInt32;
//variable permettant de stocker la fenetre courant
w:WinHandle;
//variable permettant de stocker le rectangle definissant la taille de la fenetre
r:RectangleType;
//variable permettant de stocker l etat actuel de la saisie virtuelle
v:UInt16;

begin

//On defini a zero la variable de retour
CallPP:='0';

//On teste la variable passé en parametre S permettant de savoir si l'on veut executer l applet en mode Set ou en mode Get
if S='0' then
begin
//On teste si l'api de zone de saisie virtuelle est disponible en tentant de recuperer la version de l'api
error:=FtrGet($70696E73,1,version);
if (error=0) then
begin
if (version<>0) then
begin

//on recupere le formulaire courant
f:=FrmGetActiveForm;

//on indique que celui ci accepte que la zone virtuelle soit fermer
FrmSetDIAPolicyAttr(f,1);

//On va cacher la zone virtuelle
SetDIAState(1);

//On va donner une valeur par defaut
//au boutton permettant de cacher la
//zone virtuelle.
PINSetInputTriggerState(0);

//On cree un rectangle pour
//Redimensionner notre fenetre
r.topLeft.x:=0;
r.topLeft.y:=0;
r.extent.x:=320;
r.extent.y:=480;

//on recupere la fenetre courante
w:=FrmGetWindowHandle(f);

//on la redimensionne
WinSetBounds(w,@r);

//on defini les tailles preferes, maxi et mini
WinSetConstraintsSize(w,320,480,320,480,320,480);

CallPP:='1';
end;
end;
end;

if S='1' then
begin

CallPP:='0';

//On teste si l on se trouve bien sur une
//machine supportant le 320*480
error:=FtrGet($70696E73,1,version);
if (error=0) then
begin
if (version<>0) then
begin

//On recupere l'etat de la zone virtuelle de saisie
v:=GetDIAState;

//On transforme l'entier en une string
StrIToA(S,v);
//On attribut a la variable de retour notre string
CallPP:=S
end;
end;

end;
end;

begin
iBasCallPP:=CallPP;
end.


Donc rien de bien compliqué, seulement un accés à deux apis que l'on a pas sous iziBasic.

Le code iziBasic

Je vais maintenant vous montrer comment utiliser notre applet PP avec izibasic.

'PPTest.ibas'


DIM %DIAState%


BEGIN

E=HIGHRES(1)
A$=CALLPP$(100,"0")
REPEAT
A$=CALLPP$(100,"1")
A=VAL(A$)
IF A<>%DIAState% THEN REM GOSUB NOTREMETHODEDEDESSINDEGUI %DIAState%=D ENDIF
E=DOEVENTS

UNTIL E=-1

END


Je ne pense pas que le code mérite d'être commenté vu son extrème simplicité. On passe en 320*480, puis ensuite on teste si l'utilisateur change l'etat de la saisie virtuelle pour pouvoir redessiner notre formulaire car une fois que l'on repasse en 320*480 ou en 320*320.

Conclusion

La gestion de la zone de saisie virtuelle est des plus simples, par défaut, PalmOS considère que celle ci n'est pas gérée. On indique donc que la form actuelle de iziBasic la gère et on la met à une valeur initialle, on met l'etat par masquée par défault du boutton permettant de la masquer et on teste sur celle ci est masquée ou ouverte pour redéssiner notre formulaire.



Khertan.net by Benoit HERVIER Alias Khertan.